From 50abd15e88c7aaf9a7233d7b42bf07674984c69c Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20H=C3=A4rdeman?= Date: Wed, 15 Oct 2025 15:07:32 +0200 Subject: [PATCH] luci-mod-status,-network: remove checkUfpInstalled MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Right now, the checkUfpInstalled RPC call is performed first, and only after that can the other Promises be called. Simplify this by adding a single check for /usr/sbin/ufpd in the rpcd ucode, and replace calls to checkUfpInstalled() with simple L.hasSystemFeature('ufpd') check (which is only done once, and cached). This also allows the 'stat' permission to be removed from a couple of acls. Signed-off-by: David Härdeman --- .../luci-base/root/usr/share/rpcd/ucode/luci | 1 + .../resources/view/network/dhcp.js | 28 ++++++------------- .../share/rpcd/acl.d/luci-mod-network.json | 3 +- .../resources/view/status/include/40_dhcp.js | 22 ++++----------- .../resources/view/status/routes.js | 28 ++++++------------- .../resources/view/status/routesj.js | 28 ++++++------------- .../rpcd/acl.d/luci-mod-status-index.json | 3 +- .../usr/share/rpcd/acl.d/luci-mod-status.json | 4 +-- 8 files changed, 36 insertions(+), 81 deletions(-) diff --git a/modules/luci-base/root/usr/share/rpcd/ucode/luci b/modules/luci-base/root/usr/share/rpcd/ucode/luci index 1e20634d4c..458c6573c2 100644 --- a/modules/luci-base/root/usr/share/rpcd/ucode/luci +++ b/modules/luci-base/root/usr/share/rpcd/ucode/luci @@ -237,6 +237,7 @@ const methods = { relayd: access('/usr/sbin/relayd') == true, apk: access('/usr/bin/apk') == true, wifi: access('/sbin/wifi') == true, + ufpd: access('/usr/sbin/ufpd') == true, vrf: access('/sys/module/vrf/refcnt') == true, // vrf.ko is loaded netifd_vrf: false, }; diff --git a/modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js b/modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js index 95240f6a5e..074dcfe95d 100644 --- a/modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js +++ b/modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js @@ -11,7 +11,7 @@ 'require tools.dnsrecordhandlers as drh'; var callHostHints, callDUIDHints, callDHCPLeases, CBILeaseStatus, CBILease6Status; -var checkUfpInstalled, callUfpList; +var callUfpList; callHostHints = rpc.declare({ object: 'luci-rpc', @@ -31,12 +31,6 @@ callDHCPLeases = rpc.declare({ expect: { '': {} } }); -checkUfpInstalled = rpc.declare({ - object: 'file', - method: 'stat', - params: [ 'path' ] -}); - callUfpList = rpc.declare({ object: 'fingerprint', method: 'fingerprint', @@ -289,19 +283,13 @@ function validateMACAddr(pools, sid, s) { return view.extend({ load: function() { return Promise.all([ - checkUfpInstalled('/usr/sbin/ufpd') - ]).then(data => { - var promises = [ - callHostHints(), - callDUIDHints(), - getDHCPPools(), - network.getNetworks(), - data[0].type === 'file' ? callUfpList() : null, - uci.load('firewall') - ] - - return Promise.all(promises); - }); + callHostHints(), + callDUIDHints(), + getDHCPPools(), + network.getNetworks(), + L.hasSystemFeature('ufpd') ? callUfpList() : null, + uci.load('firewall') + ]); }, render: function([hosts, duids, pools, networks, macdata]) { diff --git a/modules/luci-mod-network/root/usr/share/rpcd/acl.d/luci-mod-network.json b/modules/luci-mod-network/root/usr/share/rpcd/acl.d/luci-mod-network.json index 42181f6ee2..a297e03d79 100644 --- a/modules/luci-mod-network/root/usr/share/rpcd/acl.d/luci-mod-network.json +++ b/modules/luci-mod-network/root/usr/share/rpcd/acl.d/luci-mod-network.json @@ -39,8 +39,7 @@ "read": { "ubus": { "luci-rpc": [ "getDHCPLeases", "getDUIDHints", "getHostHints" ], - "fingerprint": [ "fingerprint" ], - "file": [ "stat" ] + "fingerprint": [ "fingerprint" ] }, "uci": [ "dhcp" ] }, diff --git a/modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js b/modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js index 27e903f2cd..99dc67af52 100644 --- a/modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js +++ b/modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/40_dhcp.js @@ -16,12 +16,6 @@ var callUfpList = rpc.declare({ method: 'fingerprint', }); -var checkUfpInstalled = rpc.declare({ - object: 'file', - method: 'stat', - params: [ 'path' ] -}); - return baseclass.extend({ title: '', @@ -30,17 +24,11 @@ return baseclass.extend({ load: function() { return Promise.all([ - checkUfpInstalled('/usr/sbin/ufpd') - ]).then(data => { - var promises = [ - callLuciDHCPLeases(), - network.getHostHints(), - data[0].type === 'file' ? callUfpList() : null, - L.resolveDefault(uci.load('dhcp')) - ]; - - return Promise.all(promises); - }); + callLuciDHCPLeases(), + network.getHostHints(), + L.hasSystemFeature('ufpd') ? callUfpList() : null, + L.resolveDefault(uci.load('dhcp')) + ]); }, handleCreateStaticLease: function(lease, ev) { diff --git a/modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js b/modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js index e48c1d6534..79ee5acef6 100644 --- a/modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js +++ b/modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js @@ -11,12 +11,6 @@ const callNetworkInterfaceDump = rpc.declare({ expect: { interface: [] } }); -const checkUfpInstalled = rpc.declare({ - object: 'file', - method: 'stat', - params: [ 'path' ] -}); - const callUfpList = rpc.declare({ object: 'fingerprint', method: 'fingerprint', @@ -44,19 +38,15 @@ function applyMask(addr, mask, v6) { return view.extend({ load() { return Promise.all([ - checkUfpInstalled('/usr/sbin/ufpd') - ]).then(([ufpcheck]) => { - return Promise.all([ - callNetworkInterfaceDump(), - L.resolveDefault(fs.exec('/sbin/ip', [ '-4', 'neigh', 'show' ]), {}), - L.resolveDefault(fs.exec('/sbin/ip', [ '-4', 'route', 'show', 'table', 'all' ]), {}), - L.resolveDefault(fs.exec('/sbin/ip', [ '-4', 'rule', 'show' ]), {}), - L.resolveDefault(fs.exec('/sbin/ip', [ '-6', 'neigh', 'show' ]), {}), - L.resolveDefault(fs.exec('/sbin/ip', [ '-6', 'route', 'show', 'table', 'all' ]), {}), - L.resolveDefault(fs.exec('/sbin/ip', [ '-6', 'rule', 'show' ]), {}), - ufpcheck?.type === 'file' ? callUfpList() : null - ]); - }); + callNetworkInterfaceDump(), + L.resolveDefault(fs.exec('/sbin/ip', [ '-4', 'neigh', 'show' ]), {}), + L.resolveDefault(fs.exec('/sbin/ip', [ '-4', 'route', 'show', 'table', 'all' ]), {}), + L.resolveDefault(fs.exec('/sbin/ip', [ '-4', 'rule', 'show' ]), {}), + L.resolveDefault(fs.exec('/sbin/ip', [ '-6', 'neigh', 'show' ]), {}), + L.resolveDefault(fs.exec('/sbin/ip', [ '-6', 'route', 'show', 'table', 'all' ]), {}), + L.resolveDefault(fs.exec('/sbin/ip', [ '-6', 'rule', 'show' ]), {}), + L.hasSystemFeature('ufpd') ? callUfpList() : null + ]); }, getNetworkByDevice(networks, dev, addr, mask, v6) { diff --git a/modules/luci-mod-status/htdocs/luci-static/resources/view/status/routesj.js b/modules/luci-mod-status/htdocs/luci-static/resources/view/status/routesj.js index 001dd7acf3..37409f721d 100644 --- a/modules/luci-mod-status/htdocs/luci-static/resources/view/status/routesj.js +++ b/modules/luci-mod-status/htdocs/luci-static/resources/view/status/routesj.js @@ -12,12 +12,6 @@ const callNetworkInterfaceDump = rpc.declare({ expect: { interface: [] } }); -const checkUfpInstalled = rpc.declare({ - object: 'file', - method: 'stat', - params: [ 'path' ] -}); - const callUfpList = rpc.declare({ object: 'fingerprint', method: 'fingerprint', @@ -45,19 +39,15 @@ function applyMask(addr, mask, v6) { return view.extend({ load() { return Promise.all([ - checkUfpInstalled('/usr/sbin/ufpd') - ]).then(([ufpcheck]) => { - return Promise.all([ - callNetworkInterfaceDump(), - L.resolveDefault(fs.exec('/sbin/ip', [ '-4', '-j', 'neigh', 'show' ]), {}), - L.resolveDefault(fs.exec('/sbin/ip', [ '-4', '-j', 'route', 'show', 'table', 'all' ]), {}), - L.resolveDefault(fs.exec('/sbin/ip', [ '-4', '-j', 'rule', 'show' ]), {}), - L.resolveDefault(fs.exec('/sbin/ip', [ '-6', '-j', 'neigh', 'show' ]), {}), - L.resolveDefault(fs.exec('/sbin/ip', [ '-6', '-j', 'route', 'show', 'table', 'all' ]), {}), - L.resolveDefault(fs.exec('/sbin/ip', [ '-6', '-j', 'rule', 'show' ]), {}), - ufpcheck?.type === 'file' ? callUfpList() : null, - ]); - }); + callNetworkInterfaceDump(), + L.resolveDefault(fs.exec('/sbin/ip', [ '-4', '-j', 'neigh', 'show' ]), {}), + L.resolveDefault(fs.exec('/sbin/ip', [ '-4', '-j', 'route', 'show', 'table', 'all' ]), {}), + L.resolveDefault(fs.exec('/sbin/ip', [ '-4', '-j', 'rule', 'show' ]), {}), + L.resolveDefault(fs.exec('/sbin/ip', [ '-6', '-j', 'neigh', 'show' ]), {}), + L.resolveDefault(fs.exec('/sbin/ip', [ '-6', '-j', 'route', 'show', 'table', 'all' ]), {}), + L.resolveDefault(fs.exec('/sbin/ip', [ '-6', '-j', 'rule', 'show' ]), {}), + L.hasSystemFeature('ufpd') ? callUfpList() : null, + ]); }, getNetworkByDevice(networks, dev, addr, mask, v6) { diff --git a/modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status-index.json b/modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status-index.json index 3fda239775..c9e3c836cb 100644 --- a/modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status-index.json +++ b/modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status-index.json @@ -34,8 +34,7 @@ "read": { "ubus": { "luci-rpc": [ "getDHCPLeases" ], - "fingerprint": [ "fingerprint" ], - "file": [ "stat" ] + "fingerprint": [ "fingerprint" ] } } }, diff --git a/modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json b/modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json index 729cb177e3..f551669c49 100644 --- a/modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json +++ b/modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status.json @@ -49,7 +49,7 @@ "/sbin/ip -[46] rule show": [ "exec" ] }, "ubus": { - "file": [ "exec", "stat" ], + "file": [ "exec" ], "fingerprint": [ "fingerprint" ] } } @@ -64,7 +64,7 @@ "/sbin/ip -[46] -j rule show": [ "exec" ] }, "ubus": { - "file": [ "exec", "stat" ], + "file": [ "exec" ], "fingerprint": [ "fingerprint" ] } } -- 2.30.2